package com.ia2014.tp.portal2.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.log4j.Logger;

import com.ia2014.tp.portal2.vo.UsuarioVO;

@Entity
@Table(name="Usuarios")
public class Usuario extends AbstractEntity<UsuarioVO> {

	@Transient
	private static Logger logger =  Logger.getLogger(Usuario.class);
	
	@Id
	@Column(name="usuario", length=100, nullable=false, unique=true)
	private String userLogin;
	
	@Column(name="password", length=100, nullable=false)
	private String password;
	
	@Column(name="nombre", length=50, nullable=false)
	private String nombre;
	
	@Column(name="apellido", length=50, nullable=false)
	private String apellido;
	
	@Column(name="direccion", length=100, nullable=false)
	private String direccion;
	
	@Column(name="coordenada_x")
	private double coordenadaX;
	
	@Column(name="coordenada_y")
	private double coordenadaY;
	
	public String getUserLogin() {
		return userLogin;
	}

	public void setUserLogin(String userLogin) {
		this.userLogin = userLogin;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public double getCoordenadaX() {
		return coordenadaX;
	}

	public void setCoordenadaX(double coordenadaX) {
		this.coordenadaX = coordenadaX;
	}

	public double getCoordenadaY() {
		return coordenadaY;
	}

	public void setCoordenadaY(double coordenadaY) {
		this.coordenadaY = coordenadaY;
	}

	@Transient
	protected UsuarioVO getVOInstance() {
		return new UsuarioVO();
	}
	
	@Transient
	public UsuarioVO getVO() {
		try{
		UsuarioVO vo = getVOInstance();
		
		//vo.setId(id);
		vo.setUserLogin(userLogin);
		vo.setPassword(password);
		vo.setNombre(nombre);
		vo.setApellido(apellido);
		vo.setDireccion(direccion);
		vo.setCoordenadaX(coordenadaX);
		vo.setCoordenadaY(coordenadaY);
		
		return vo;
		}
   		catch (Exception e){
   			logger.error("Error al tratrar de generar un Value Object de Usuario");
   			logger.error(e.toString());
   			logger.debug("Stacktrace", e);
   			return null;
   		}
	}

	@Transient
	public void setVO(UsuarioVO vo) {
		try{
		/*if (id == null) {
			this.setId(vo.getId());
		}*/
		
		this.setUserLogin(vo.getUserLogin());
		this.setPassword(vo.getPassword());
		
		this.setNombre(vo.getNombre());
		this.setApellido(vo.getApellido());
		this.setDireccion(vo.getDireccion());
		
		this.setCoordenadaX(vo.getCoordenadaX());
		
		this.setCoordenadaY(vo.getCoordenadaY());
		
		}
   		catch (Exception e){
   			logger.error("Error al tratrar de cargar un Usuario a partir de un Value Object");
   			logger.error(e.toString());
   			logger.debug("Stacktrace", e);
   		}
	}
}
